package hash

import java.util

import link.DoublyLinkedList

import scala.reflect.ClassTag

object HashDemo {

    def main(args: Array[String]): Unit = {

        val table: Hashtable[Int] = new Hashtable[Int]
        table.add(10)  //因为数组里边存的是链表，所以存相同的value运算出的索引是同一个，数据会存在同一个链表上
        table.add(10)
        table.add(10)
        table.add(10)




        table.printInfo
    }



}

class Hashtable[T :ClassTag :Ordering]{ //T :ClassTag 泛型上下文，能使T泛型编译通过

    val initLen = 2
     val arr: Array[DoublyLinkedList[T]] = new Array[DoublyLinkedList[T]](initLen)

    def add(value :T) :Boolean={
        val index :Int = value.hashCode().abs % initLen   //abs 去绝对值
        if (arr(index) == null){
            arr(index) = new DoublyLinkedList[T]  //把链表丢进去
        }
        arr(index).add(value)
        true

    }

    def printInfo ={
        for (link <- arr if link != null){
            link.foreach(x=>print(x + "->"))
            println()
        }
    }

}